/* 接口：命名对象类型的另一种方式 */

interface Point1 {
  x: number;
  y: number;
}

function printCoord(pt: Point1) {
  console.log("The coordinate's x value is " + pt.x);
  console.log("The coordinate's y value is " + pt.y);
}

printCoord({ x: 100, y: 100 });

// 接口和类型别名的区别：
// 1. 类型别名不能进行扩展，无法添加新的属性
// 2. 接口可以扩展

// interface-通过继承扩展类型=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
interface AnimalInterface {
  name: string
}

interface BearInterface extends AnimalInterface {
  honey: boolean
}

function getBearInterface(): BearInterface {
  return { name: "hi", honey: true }
}

const bearInterface = getBearInterface()
bearInterface.name
bearInterface.honey

// type-通过继承扩展类型=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
type AnimalType = {
  name: string
}

type BearType = AnimalType & {
  honey: boolean
}

function getBearType(): BearType {
  return { name: "hi", honey: true }
}

const bearType = getBearType()
bearType.name
bearType.honey

// interface-对一个已经存在的接口添加新的字段=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
// 首先定义 TypeScriptAPI 接口
interface TypeScriptAPI {
  transpileModule: (input: string, compilerOptions: any) => any;
  // 可以添加更多 TypeScript API 方法
}

interface Window {
  title: string
}

interface Window {
  ts: TypeScriptAPI
}

const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});

// Type-创建后不能被改变=====================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================
// 注释掉这部分代码，因为会产生重复标识符错误
/*
type Window = {
  title: string
}

type Window = {
  ts: TypeScriptAPI
}
// Error: Duplicate identifier 'Window'.
*/


